package com.mj;

import com.mj.entity.Book;
import com.mj.entity.Teacher;
import com.mj.entity.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo {
    @Test
    public void tt() {
        ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext("applicationContext.xml");
        //在没参数值的情况下，默认是单例模式，只要上面那行代码一运行，就会调用无参的构造方法和初始化方法，当有参数值时，就不调用无参的构造方法
        //单例模式是不管你用不用，都全部给你实例化,当是多实例模式时，如果不用也不会进行初始化，因为不知道要用那个
        //当多例模式时，下面用一次就会初始一次
        //User user1 = ct.getBean(User.class);
        //User user2 = ct.getBean(User.class);
        //Teacher t = ct.getBean("teacher",Teacher.class);
        //System.out.println(t.getBook().getName());
        //ct.close();//销毁方法只有在单例模式下才会实例化，多例模式下不会启用，单例模式下，第二次实例化不会起作用，例如上面的user2
        //上面的都是利用的配置方式的
        //Book book = ct.getBean("book", Book.class);
        //System.out.println(book.getTeacher());
        //ct.close();
        User user = ct.getBean(User.class);
        //System.out.println(user);
        user.save();//当调用这个save方法时，会在执行前后调用log里面的open和close，因为aop使得user已经和log关联了,并且配置里面指定了所有s开头的方法
        user.ai();
        ct.close();
    }
}
